#include "Thread.hpp"
#include<iostream>
#include <unistd.h>

using namespace ThreadModule;

int main()
{
    // Lambda表达式返回的是一个匿名类的对象(可以看成函数对象)
    // 这个匿名类重载了operator()，使得Lambda表达式可以像函数一样被调用
    // 咱们创建这个线程就是为了给它指派任务的，这个任务必须是类外提供的方法，可以传进去

    // 1. 构建对象，传递任务
    Thread t([](){
        while (true)
        {
            char name[128];
            pthread_getname_np(pthread_self(), name, sizeof(name));
            std::cout << " 我是一个新线程，我的名字是: " << name << std::endl;
            sleep(1);
        }
    });

    // 2. 创建线程，启动线程
    t.Start();

    sleep(5);
    
    // 3. 取消线程
    t.Stop();

    sleep(5);

    // 4. 等待线程
    t.Join();

    // 5. 分离线程
    t.Detach();

    return 0;
}